home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Input 64
/
Input_64_86-07_1986_Verlag_Heinz_Weise_de.d64
/
mps801 druck.s
< prev
next >
Wrap
Text File
|
2023-02-26
|
4KB
|
166 lines
;
;deutsche umlaute fuer mps801
;und kompatible von w.fahl
;(c) input64 1986
;geschrieben auf input-ass (6/86)
;_
;flag unten mit 1 oder 0 versorgen
;je nach gewuenschter adresslage
;des lauffaehigen codes
;_
;definitionen und systemadressen
:unten = 1 ;switch adresslage
:drucker = $04 ;ausgabegeraet
:device = $9a ;geraetenummer
:bsoutvek = $0326 ;ausgabevektor
:bsout = $f1ca ;ausgaberoutine
;
;_
;basic-zeile
;
org $0801 ; basic-anfang
w opcode ;link-adress
w 1986 ;zeilen-nummer
b $9e ;sys-token
b "2090:" ;sys-adresse
b $8f ;rem-token
b "druckertreiber sys" ;kommentar
;_
;je nach adresslage
;aufrufadresse aendern
if unten
b "00828"
el
b "53000"
ei
:opcode b 0,0,0 ;basic-zeilen ende
;_
s 2090-* ;code auf adr 2090
;verschieberoutine fuer 1 block
:begin ldx #00 ;zaehler auf null
:opclop lda dest,x ;code holen und
sta sorc,x ;ans ziel schreiben
inx ;zaehler hoch
cpx #ende-sorc ;schon alle?
bne opclop ;wenn nicht, weiter
jmp sorc ;treiber initialisieren
:dest = * ;code-lage
;_
;code-adresse nach flags assemblieren
if unten
org $033c ;real code cass-puff
el
org $cf08 ;real code begin
ei
;_
;initializierung des treibers
;
:sorc sei ;interrupt sperren
lda #>newbsout ;ausgabe-
sta bsoutvek+1 ;vektor
lda #<newbsout ;auf neue
sta bsoutvek ;routine
cli ;interrupt freigeben
rts ;retour to basic
;_
;daten
:temp b $00 ;speicher fuer zeichen
;
;ascii-codes der umlaute
:umlauttab b $22,$5b,$5c,$5d
b $7b,$7c,$7d,$7e
;
;tabelle der benoetigten grafik-zeichen
;
:grafiktab
;anfuehrungszeichen im graphic-mode
b 08
b %10000000, %10000111, %10000000
b %10000111, %10000000, %10000000
b 0
;grosses ae im graphic-mode
b 08
b %11111100, %10010011, %10010010
b %10010011, %11111100, %10000000
b 0
;grosses oe im graphic-mode
b 08
b %10111100, %11000011, %11000010
b %11000011, %10111100, %10000000
b 0
;grosses ue im graphic-mode
b 08
b %10111110, %11000001, %11000000
b %11000001, %10111110, %10000000
b 0
;kleines ae im graphic-mode
b 08
b %10100000, %11010101, %11010100
b %10111101, %11000000, %10000000
b 0
;kleines oe im graphic-mode
b 08
b %10111000, %11000101, %11000100
b %11000101, %10111000, %10000000
b 0
;kleines ue im graphic-mode
b 08
b %10111101, %11000000, %11000000
b %10111101, %11000000, %10000000
b 0
;sz (eszet!) im graphic-mode
b 08
b %11111110, %10100101, %10100101
b %10101010, %10010000, %10000000
b 0
;_
;neue ausgabe-routine
;
:newbsout sta temp ;zeichen retten
lda device ;test ob ausgabe
cmp #drucker ;auf drucker
beq treiber ;wenn ja => treiber
;
:back lda temp ;zeichen
jmp bsout ;ausgeben
;
:treiber tya ;register retten
pha
txa
pha
ldy #7 ;anzahl der umlaute -1
lda temp ;test ob zeichen
:testlp cmp umlauttab,y;umlaut
beq found ;=> found
;
dey ;naechster
bpl testlp ;umlaut
;
:back0 pla ;register
tax ;wiederherstellen
pla
tay
clc
bcc back ;normal ausgeben
;
:found tya ;nr. des zeichens nach a
asl ;mit 8 multipliziert
asl ;ergibt position in der
asl ;tabelle
tay
ldx #7 ;grafik ein und
:graflp lda grafiktab,y;sieben grafik-
jsr bsout ;zeichen ausgeben
iny
dex ;naechstes
bne graflp ;zeichen
;
lda #15 ;grafik-modus aus
sta temp ;als letztes
bne back0 ;zeichen
;
:ende = *+1 ;dummy fuers verschieben